@rem @echo off
cd %~dp0

REM 声明采用UTF-8编码
chcp 65001
::read config.ini

for /f "tokens=1,2 delims==" %%a IN (config.ini) do (
	::set %%a=%%b
	if %%a==src_dir set src_dir=%%b
	if %%a==go_dir	set go_dir=%%b
	if %%a==protoMapPath set protoMapPath=%%b
	if %%a==csharp_dir	set csharp_dir=%%b
	if %%a==include_dir set include_dir=%%b
	if %%a==src_grpc_dir set src_grpc_dir=%%b
)

echo dir: %src_dir% gofile: %protoMapPath%
:: 生成protomap
genprotomap.exe -dir %src_dir% -gofile %protoMapPath% -cfile %csharp_dir%

set BASEDIR=%~dp0
set PROTOC=%BASEDIR%linktools\lib\protoc.exe
set PROTOGEN=%BASEDIR%linktools\lib\protogen.exe
set PROTOGOGEN=%BASEDIR%linktools\lib\protoc-gen-gogofaster.exe
set RROTOLUA=%BASEDIR%linktools\lua\protoc-gen-lua.bat

echo src_grpc_dir: %src_grpc_dir%
%PROTOC% --proto_path="%src_grpc_dir%"  --plugin=protoc-gen-go=%PROTOGOGEN% --go_out="plugins=grpc:%go_dir%" %src_grpc_dir%*.proto


if "%src_dir%" =="" (
	echo "没有配置源文件目录"
	pause
	exit
) 

::如果有参数，则只操作参数中的proto文件
if not "%1"=="" (
	set file=%1
	if not exist "%src_dir%%file%.proto" set file=%~n1
	echo file=%file%
	call :doFile
) else (
	::遍历当前目录下所有 bat 文件，操作该文件名对应的proto
	set src_dir_files=%src_dir%*.proto
	echo %src_dir%*.proto

	for %%s in (%src_dir%\*.proto) do (
		set file=%%~ns
		set isdo=1
	call :doFile
	)
)


:doFile
::生成不同语言的proto文件，根据是否配置目标目录
echo Exec %src_dir%%file%.proto


if not "%go_dir%" == "" (
	echo To Go
	%PROTOC% --proto_path="%src_dir%;%include_dir%" --plugin=protoc-gen-go=%PROTOGOGEN% --go_out="Mgoogle/protobuf/any.proto=github.com/gogo/protobuf/types:%go_dir%" --go_opt="paths=source_relative" %src_dir%%file%.proto

    echo "==== Do Go Code Format :%go_dir% and %protoMapPath%"
    goimports.exe -format-only -w "%protoMapPath%\protoMap.go"
    echo external: goimports.exe -format-only -w "%go_dir%/%file%.pb.go"
    goimports.exe -format-only -v -w "%go_dir%/%file%.pb.go"
)

if not "%csharp_dir%" == "" (
	echo To C#
	%PROTOC% --proto_path="%src_dir%;%include_dir%" --csharp_out=%csharp_dir%  %src_dir%%file%.proto
)
